"""
压缩字符串
挑战介绍
实现一个算法来压缩一个字符串。压缩的要求如下：

需要判断压缩能不能节省空间，仅在压缩后字符串比原字符串长度更短时进行压缩。
压缩的格式是将连续相同字符替换为字符+数字形式，例如 "AAABCCDDDD" 变为 "A3BC2D4"。
挑战内容
本次挑战中，你需要在 compress_str.py 文件中补充函数 compress 的空缺部分。

compress 函数接受一个参数，string 用于指定传入的字符串;
compress 函数输出一个字符串。
你需要补充 compress 函数，使 compress 函数可以对传入的 string 字符串进行压缩。要求如下：

判断传入的字符串是否需要进行压缩，如果不需要压缩，返回原字符串；
如果需要压缩，返回压缩后的字符串；
如果传入的字符串是 None 或者空字符串，返回 None 或者空字符串。
"""


class CompressString(object):

    def compress(self, string):
        if string is None or not string:
            return string
        result = ''
        prev_char = string[0]
        count = 0
        for char in string:
            if char == prev_char:
                count += 1
            else:
                result += self._calc_partial_result(prev_char, count)
                prev_char = char
                count = 1
        result += self._calc_partial_result(prev_char, count)
        return result if len(result) < len(string) else string

    def _calc_partial_result(self, prev_char, count):
        return prev_char + (str(count) if count > 1 else '')
